package com.aqgj.SysArea.web;


import com.aqgj.SysArea.bean.SysArea;
import com.aqgj.SysArea.service.SysAreaManager;
import com.aqgj.util.JsonWrapper;
import com.aqgj.util.StringUtils;
import com.ztc.ZtcTransport.bean.ZtcTransport;
import com.ztc.ZtcTransport.service.ZtcTransportManager;
import com.ztc.ZtcTransportArea.bean.ZtcTransportArea;
import com.ztc.ZtcTransportArea.service.ZtcTransportAreaManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;


@Controller
@RequestMapping("ztc/sysArea")
public class SysAreaAction {

    @Autowired
    private SysAreaManager sysAreaManager;
    @Autowired
    private ZtcTransportAreaManager ztcTransportAreaManager;
    @Autowired
    private ZtcTransportManager ztcTransportManager;

    /**
     * 根据pid，区域级别获取行政区域.
     *
     * @param levels 区域级别
     * @param pid    pid上级id
     * @return
     */
    @RequestMapping("getListAreaByLevelsAndPid")
    @ResponseBody
    public HashMap<String, Object> getListAreaByLevelsAndPid(Integer levels, String pid) {
        List<SysArea> list = sysAreaManager.getAreaByPidAndLevel(levels, pid);
        if (list.isEmpty()) {
            return JsonWrapper.failureWrapperMsg("获取失败");
        }
        return JsonWrapper.successWrapper(list);
    }

    /**
     * 根据pid，区域级别获取行政区域.
     *
     * @return
     */
    @PostMapping("initArea")
    @ResponseBody
    public HashMap<String, Object> initArea() {
        List<SysArea> list = sysAreaManager.getAreaByPidAndLevel(1, "000000");
        if (list.isEmpty()) {
            return JsonWrapper.failureWrapperMsg("获取失败");
        }
        return JsonWrapper.successWrapper(list);
    }

//    /**
//     * 后台树形获取地区行政区域（延迟加载请求）
//     *
//     * @param levels    区域等级
//     * @param pid       父级id
//     * @param cid       选择的公司id
//     * @param response
//     * @param ischecked 是否勾选存在管理
//     * @return json数据
//     */
//    @RequestMapping("initZone")
//    @ResponseBody
//    public List<HashMap<String, Object>> initZone(Integer levels, String pid, String cid, HttpServletResponse response, Boolean ischecked) {
//        List<SysArea> list = sysAreaManager.getAreaByPidAndLevel(levels, pid);
//        List<ZtcTransportArea> areas = ztcTransportAreaManager.findBy("transportId", cid);
//        List<HashMap<String, Object>> areaList = new ArrayList<>();
//        HashMap<String, Object> map = null;
//        if (list.size() > 0) {
//            for (SysArea s : list) {
//                map = new HashMap<>();
//                if ("3".equals(String.valueOf(levels))) {
//                    map.put("text", s.getFullName());
//                } else {
//                    map.put("text", s.getName());
//                }
//                map.put("id", s.getId());
//                map.put("code", s.getCode());
//                map.put("levels", s.getLevels());
//                if (ischecked) {
//                    map.put("ischecked", true);
//                } else {
//                    if (areas.size() > 0) {
//                        for (ZtcTransportArea z : areas) {
//                            if (z.getAreaId().equals(s.getId())) {
//                                map.put("ischecked", true);
//                                break;
//                            } else {
//                                map.put("ischecked", false);
//                            }
//                        }
//                    } else {
//                        map.put("ischecked", false);
//                    }
//                }
//                areaList.add(map);
//            }
//        }
//        return areaList;
//    }

    /**
     * 后台树形获取行政区域（省级或地级）
     * @param cid   初始化数据（选择的公司id）
     * @param type   类型   1:省级，2:地级
     * @return json数据
     */
    @PostMapping("initProvince")
    @ResponseBody
    public HashMap<String, Object> initProvince(String cid,Integer type) {
        if (StringUtils.isBlank(cid)) {
            return JsonWrapper.failureWrapperMsg("公司参数空指针错误！");
        }
        if (type!=1&&type!=2) {
            return JsonWrapper.failureWrapperMsg("参数指向性错误！");
        }
        List<HashMap<String, Object>> areaList = new ArrayList<>();
        ZtcTransport ztcTransport = ztcTransportManager.get(cid);
        if (ztcTransport == null) {
            return JsonWrapper.failureWrapperMsg("不存在该公司信息！");
        }
//        HashMap<String, Object> map1 = new HashMap<>();
        SysArea sysArea = sysAreaManager.findUniqueBy("code", ztcTransport.getAreaCode());
//        if (sysArea != null) {
//            map1.put("text", sysArea.getName());
//            map1.put("id", sysArea.getId());
//            map1.put("code", sysArea.getCode());
//            map1.put("levels", sysArea.getLevels());
//            map1.put("key","0");
//            map1.put("ischecked", true);
//            areaList.add(map1);
//        }
        List<SysArea> list = new ArrayList<>();
        if (type == 1) {//省级
            list.addAll(sysAreaManager.getAreaByPidAndLevel(1, "000000"));
        }
        if (type == 2) {
            if (sysArea.getType() == 1) {//直辖市
                SysArea sysArea1 = sysAreaManager.get(sysArea.getPid());//直辖市二级地区
                List<SysArea> sysAreas = sysAreaManager.findBy("pid", sysArea1.getPid());//直辖市所有二级地区
                for (SysArea a : sysAreas) {
                    list.addAll(sysAreaManager.getAreaByPidAndLevel(3, a.getId()));//直辖市所有三级地区
                }
            } else {
                list=sysAreaManager.findBy("pid", sysAreaManager.get(sysArea.getPid()).getPid());//非直辖市省份的三级地区
            }
        }
        List<ZtcTransportArea> areas = ztcTransportAreaManager.findBy("transportId", cid);//查出公司与管理区域关系
        HashMap<String, Object> map = null;
        if (list.size() > 0) {
//            for (SysArea s : list) {
//                if(map1.get("id").toString().equals(s.getId())){//去重
//                    list.remove(s);
//                    break;
//                }
//            }
            int value=1;
           for (SysArea s : list) {
                map = new HashMap<>();
                map.put("text", s.getName());
                map.put("id", s.getId());
                map.put("code", s.getCode());
                map.put("levels", s.getLevels());
                map.put("key",String.valueOf(value++));
                if (areas.size() > 0) {
                   for (ZtcTransportArea z : areas) {
                        if (z.getAreaId().equals(s.getId())) {
                            map.put("ischecked", true);
                            break;  //如果存在省级关系跳出循环
                        } else {
                            map.put("ischecked", false);
                        }
                    }
                } else {
                    map.put("ischecked", false);
                }
               areaList.add(map);
            }
        }
        return JsonWrapper.successWrapper(areaList);
    }
}